ADO.NET Een DAL klasse maken voor een entiteit
Home

ADO.NET Een DAL klasse maken voor een entiteit

ADO.NET Een DAL klasse maken voor een entiteit

We volgen hier de filosofie van het Entity Framework en maken voor elke entiteit een aparte DAL klasse. Het is geen goed idee om een DAL klasse voor meerdere entiteiten te maken. Wel is het zo dat in een DAL voor een bepaalde entiteit eventueel andere entiteiten aangesproken kunnen worden als er foreign keys in de desbetreffende entiteit aanwezig zijn. Voor de entiteit Person bijvoorbeeld, zal de DAL de waarde van de Name kolom van het land van de leverancier opzoeken in de Country entiteit.

Probleem

De DAL klasse moet een verbinding kunnen maken met de database. Het Connection object heeft daarvoor een connectiestring nodig. Vóór .NET Core was de beste plaats om een connectiestring te bewaren het Web.Config bestand voor Web applicaties of het App.Config bestand voor Windows applicaties. .NET Core beschikt over een andere configuratie API die we hier ook zullen gebruiken.

Je vindt uitleg over de nieuwe configuratie API op de pagina De .NET Core configuratie API.

Om het gebruik van ADO.NET te leren maken we een Console app en zetten we de connectiestring in het appsettings.json bestand.

Design

Oplossing

  1. Voorbereiding
    1. Je hebt de DDL voor EventCategory uitgevoerd (zie Fric-frac MySQL Data Definition Language) .
    2. Je hebt de stored procedures voor de entiteit EventCategory gemaakt (zie Fric-frac MySQL DML EventCategory).
    3. Je hebt de BLL gemaakt voor de EventCategory entiteit (BLL EventCategory).
  2. Open je project in Visual Studio. In het voorbeeld is dat het adodotnet. project.
  3. Voeg de elementen voor de connectie string toe in het appsettings.json (staat in de root van je project) bestand:
    {
      "connection": {
        "server": "164.132.231.13",
        "userid": "docent1",
        "password": "UKSSL14H",
        "port": "3306",
        "database": "docent1",
        "SslMode" : "none"
      }
    }
    
  4. In de map met de naam Bll staat EventCategory.cs.
  5. Maak in de root van het project een nieuwe map met de naam Dal:
    Visual Studio Create Dal folder in project
    Visual Studio Create Dal folder in project
  6. Plaats in de Dal map de DAL Interface, zie hiervoor Een DAL interface.
  7. De DAL klasse haalt de connectie op uit het appsettings.json bestand. Daarvoor heb je de Microsoft.Extensions.Configuration namespace nodig. In Console applicaties wordt niet die automatisch geladen en moet je zelf een referenctie toevoegen. Op de De .NET Core configuratie API pagina lees je hoe je dat doet.
  8. In de Dal map voeg je een klassenbestand toe met de naam EventCategory.cs. Je zou er de naam EventCategoryDal aan kunnen geven om een onderscheid te maken met de bll klasse maar dat hoeft niet omdat het bestand in een andere submap staat dan de bll met de zelfde naam. Op de pagina Een klassenbestand toevoegen aan een project lees je hoe je een klassenbestand aan je project toevoegt.
  9. We declareren de gebruikte namespaces. De klasse zetten we in de namespace FricFrac.Dal en implementeert de IDal interface. De instantie van de Bll wordt buiten de klasse aangemaakt en als parameter meegegeven. Dat is een artisanale manier om Depency Injection te implementeren. In de constructor halen we de elementen van de connectiestring op en creëren we de connectiestring op basis daarvan:
    using Microsoft.Extensions.Configuration;
    using MySql.Data.MySqlClient;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    
    namespace FricFrac.Dal
    {
        class EventCategory : Dal.IDal<Bll.EventCategory>
        {
            private string connectionString;
            private string message;
    
            public string Message
            {   
                get { return message; }
                set { message = value; }
            }
    
            public EventCategory()
            {
                // Lees de connectiestring in
                // later gebruiken hiervoor dependancy injection
                var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json");
                IConfiguration configuration = builder.Build();
                connectionString = string.Format("server={0};user id={1};password={2};port={3};database={4};SslMode={5};",
                    configuration["connection:server"],
                    configuration["connection:userid"],
                    configuration["connection:password"],
                    configuration["connection:port"],
                    configuration["connection:database"],
                    configuration["connection:SslMode"]);
            }
        }
    }
  10. DAL ReadAll of SelectAll methode: soms gebruiken we SelectAll als naam voor de methode. Als we de CRUD terminologie volgen gebruiken we de naam ReadAll.
  11. DAL ReadOne of SelectOne methode: soms gebruiken we SelectOne als naam voor de methode. Als we de CRUD terminologie volgen gebruiken we de naam ReadOne.
  12. DAL Create of Insert methode: Soms gebruiken we Insert als naam voor de methode. Als we de CRUD terminologie volgen gebruiken we de naam Create.
  13. DAL Update methode
  14. DAL Delete methode
  15. We hebben al die methoden gemaakt in Visual Studio. Tijd om alles te pushen naar Bitbucket en dan naar Cloud9 te pullen en zien of daar alles ook werkt:
    1. we gaan naar Powershell
      1. checken met git status wat er allemaal gewijzigd is
      2. we merken dat er VS nieuwe bestanden heeft gemaakt die we niet in de repo willen, dus wijzigen we het .gitignore bestand:
      3. met git rm -rf --cached . activeren we het nieuwe .gitignore bestand (VS verzameld automatisch bestanden)
      4. opnieuw git status
      5. verzamel de bestanden met git add --all
      6. De bestanden neerleggen met git commit -m "DAL klasse EventCategory toegevoegd"
      7. git push -u origin master
    2. in de terminal van Cloud9:
      1. ga naar de root van de workspace
      2. git pull origin master
      3. ga naar:
        cd dotnetcore/adodotnet/adodotnet
      4. dotnet run
  16. Met dit als reultaat:
    Cloud9 Result Test EventCategory DAL
    Cloud9 Result Test EventCategory DAL

JI
2017-09-15 19:16:43